home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
031-040
/
amok37
/
skrÄbel
/
sc_computer-mod-asm.zoo
/
Skräbel-src
/
sc_Computer-Mod.ASM
/
AngrenzungenOk.ASM
< prev
next >
Wrap
Assembly Source File
|
1990-03-19
|
6KB
|
218 lines
;(*****************************************************************************
;
; :Program. AngrenzungenOk.ASM
; :Author. Georg Brünsing
; :Address. Grechte 2, D-4156 Willich 3
; :Phone. 02156/7534
; :ShortCut. gb
; :Support. -
; :Version. 1.0
; :Date. 20-Feb-89
; :Copyright. PD
; :Language. Assembler
; :Translator. Profimat / DATA BECKER
; :Imports. -
; :Update. -
; :History. -
; :ModHistory. -
; :Contents. Assembler Source für Skräbel
; :Remark. -
; :Usage. -
;
;*****************************************************************************)
INCLUDE "Rec.ASM"
;Anfang:
; MOVEA.L #3020168 , A2
; BSR AngrenzungenOk
; BRA Anfang
AngrenzungenOk:
; Eingang in A2 = ComputerMsgPtr
; Ausgang in D0 = TRUE wenn Ok
\Sprung EQUR A6
\GWort EQUR A3
\ComMsgPtr EQUR A2
\ZugRing EQUR A1
\Spielfeld EQUR A0
\left EQUR D7
\top EQUR D6
\right EQUR D5
\down EQUR D4
\i EQUR D3
\Off EQUR D2
\Off2 EQUR D1
\Bool EQUR D0
LEA ZugRing(\ComMsgPtr) , \ZugRing
MOVE.W AkZugRing(\ComMsgPtr) , \Off
SUBQ.W #BeginZugRing , \Off
MULU #ZugRingSize , \Off
LEA (\ZugRing,\Off.W) , \ZugRing
LEA Spielfeld(\ComMsgPtr), \Spielfeld
MOVE.W left(\ZugRing) , \left
SUBQ.W #1 , \left
MOVE.W top(\ZugRing) , \top
SUBQ.W #1 , \top
MOVE.W right(\ZugRing) , \right
SUBQ.W #1 , \right
MOVE.W down(\ZugRing) , \down
SUBQ.W #1 , \down
CMP.B #SenkrechtBit , RAngelegt(\ZugRing)
BNE \Waagerecht
\Senkrecht:
MOVE.W \left , \Off2
MULU #FeldAnz , \Off2
MOVE.W \top , \Off
BLE.S \S_IF_OR
ADD.W \Off2 , \Off
TST.B -1(\Spielfeld,\Off.W)
BNE.S \S_WHILE_1_A
\S_IF_OR:
CMP.W #FeldAnz-1 , \down
BGE \Ok
MOVE.W \Off2 , \Off
ADD.W \down , \Off
TST.B 1(\Spielfeld,\Off.W)
BEQ \Ok
\S_WHILE_1_A:
MOVE.W \top , \Off
BLE.S \S_WHILE_2_A
ADD.W \Off2 , \Off
\S_WHILE_1:
TST.B -1(\Spielfeld,\Off.W)
BEQ.S \S_WHILE_2_A
SUBQ.W #1 , \top
BLE.S \S_WHILE_2_A
SUBQ.W #1 , \Off
BRA.S \S_WHILE_1
\S_WHILE_2_A:
CMP.W #FeldAnz-1 , \down
BGE.S \S_FOR_A
MOVE.W \down , \Off
ADD.W \Off2 , \Off
\S_WHILE_2:
TST.B 1(\Spielfeld,\Off.W)
BEQ.S \S_FOR_A
ADDQ.W #1 , \down
CMP.W #FeldAnz-1 , \down
BGE.S \S_FOR_A
ADDQ.W #1 , \Off
BRA.S \S_WHILE_2
\S_FOR_A:
LEA GWort(\ComMsgPtr) , \GWort
MOVE.W \top , \i
MOVE.W \i , \Off
ADD.W \Off2 , \Off
\S_FOR:
TST.B (\Spielfeld,\Off.W)
BNE.S \S_IF_ELSE
MOVEM.L \GWort/\i/\left/\top/\down/\ComMsgPtr/\ZugRing/\Off , -(SP)
MOVE.W \left , D0
ADDQ.W #1 , D0
MOVE.W \i , D1
ADDQ.W #1 , D1
MOVE.L AdrSpielZugChar(\ComMsgPtr) , \Sprung
JSR (\Sprung)
MOVEM.L (SP)+ , \GWort/\i/\left/\top/\down/\ComMsgPtr/\ZugRing/\Off
LEA Spielfeld(\ComMsgPtr), \Spielfeld
MOVE.B D0 , (\GWort)+
BRA.S \S_END_FOR
\S_IF_ELSE:
MOVE.B (\Spielfeld,\Off.W) , (\GWort)+
\S_END_FOR:
ADDQ.W #1 , \Off
ADDQ.W #1 , \i
CMP.W \i , \down
BGE.S \S_FOR
CLR.B (\GWort)
ADDQ.W #1 , \top
MOVE.W \top , top(\ZugRing)
ADDQ.W #1 , \down
MOVE.W \down , down(\ZugRing)
MOVE.L AdrWortOk(\ComMsgPtr) , \Sprung
JMP (\Sprung)
\Waagerecht:
MOVE.W \left , \Off
BLE.S \W_IF_OR
MULU #FeldAnz , \Off
ADD.W \top , \Off
TST.B -FeldAnz(\Spielfeld,\Off.W)
BNE.S \W_WHILE_1_A
\W_IF_OR:
CMP.W #FeldAnz-1 , \right
BGE \Ok
MOVE.W \right , \Off
MULU #FeldAnz , \Off
ADD.W \top , \Off
TST.B FeldAnz(\Spielfeld,\Off.W)
BEQ \Ok
\W_WHILE_1_A:
MOVE.W \left , \Off
BLE.S \W_WHILE_2_A
MULU #FeldAnz , \Off
ADD.W \top , \Off
\W_WHILE_1:
TST.B -FeldAnz(\Spielfeld,\Off.W)
BEQ.S \W_WHILE_2_A
SUBQ.W #1 , \left
BLE.S \W_WHILE_2_A
SUB.W #FeldAnz , \Off
BRA.S \W_WHILE_1
\W_WHILE_2_A:
CMP.W #FeldAnz-1 , \right
BGE.S \W_FOR_A
MOVE.W \right , \Off
MULU #FeldAnz , \Off
ADD.W \top , \Off
\W_WHILE_2:
TST.B FeldAnz(\Spielfeld,\Off.W)
BEQ.S \W_FOR_A
ADDQ.W #1 , \right
CMP.W #FeldAnz-1 , \right
BGE.S \W_FOR_A
ADD.W #FeldAnz , \Off
BRA.S \W_WHILE_2
\W_FOR_A:
LEA GWort(\ComMsgPtr) , \GWort
MOVE.W \left , \i
MOVE.W \left , \Off
MULU #FeldAnz , \Off
ADD.W \top , \Off
\W_FOR:
TST.B (\Spielfeld,\Off.W)
BNE.S \W_IF_ELSE
MOVEM.L \GWort/\i/\left/\top/\right/\ComMsgPtr/\ZugRing/\Off , -(SP)
MOVE.W \i , D0
ADDQ.W #1 , D0
MOVE.W \top , D1
ADDQ.W #1 , D1
MOVE.L AdrSpielZugChar(\ComMsgPtr) , \Sprung
JSR (\Sprung)
MOVEM.L (SP)+ , \GWort/\i/\left/\top/\right/\ComMsgPtr/\ZugRing/\Off
LEA Spielfeld(\ComMsgPtr), \Spielfeld
MOVE.B D0 , (\GWort)+
BRA.S \W_END_FOR
\W_IF_ELSE:
MOVE.B (\Spielfeld,\Off.W) , (\GWort)+
\W_END_FOR:
ADD.W #FeldAnz , \Off
ADDQ.W #1 , \i
CMP.W \i , \right
BGE.S \W_FOR
ADDQ.W #1 , \left
MOVE.W \left , left(\ZugRing)
ADDQ.W #1 , \right
MOVE.W \right , right(\ZugRing)
CLR.B (\GWort)
MOVE.L AdrWortOk(\ComMsgPtr) , \Sprung
JMP (\Sprung)
\Ok:
MOVEQ #-1 , \Bool
RTS
END